<?php 

class ocorrenciasController extends CController{
    
    public $model_name = "ocorrencia/ocorrencias";
    public function AfterLoad(){

        $this->LoadModel('usuario/login', 'uobj');
        if(CURRENT_ACTION == "status" || CURRENT_ACTION == "coletor"|| CURRENT_ACTION == "refresh" || CURRENT_ACTION == "formulario") return;
        parent::AfterLoad();

        //seta o id do item atual
        if($this->cod != ""){
            $this->LoadModel('ocorrencia/envolvido', 'env');
            $cod = $this->uobj->getCodUsuario();
            $first = $this->env->getFirstUnreadMessage($this->cod, $cod);
            $this->registerVar('first_unread', $first);
            $this->env->SetRead($this->cod, $cod);
        }
        
        //verifica se usuário tem permissão para acessar a página
        $this->LoadClassFromPlugin('ocorrencia/ocorrencias/ocorrenciasSecurity', 'security');
        $this->security->getMenu($this->cod);
        if(!$this->security->has_permission($this->cod)){
            throw new AcessDeniedException("Você não tem permissão de alterar este Assunto");
        }
        
        
        if(CURRENT_ACTION != "editar")  $this->not_empty();
        
    }
    
    public function index(){
        if(isset($_SESSION['ocorrencia/grupo'])) Redirect ('ocorrencia/grupo/show/'.$_SESSION['ocorrencia/grupo']);
        else Redirect ('ocorrencia');
    }
    
    public function show($display = true, $link = ""){
        if(empty ($this->item)){Redirect (LINK.'/formulario');}
        $page = is_numeric(@$this->vars[1])?$this->vars[1]:0;
        $this->registerVar("ocorrencia", $this->item);
        
        $this->LoadModel('ocorrencia/grupo', 'gr');
        $this->registerVar("is_arquivado_grupo" , $this->gr->IsArquivado($this->item['__grupo']));
        $this->registerVar("comp_action" , 'show');
        $this->registerVar("msgs", $this->model->getOcorrenciaMensagens($this->cod, $page));
        $this->registerVar("msg_dados", $this->model->getMensagemForm($this->cod));
    	$this->display(LINK ."/show");
    }

    public function pessoas(){

        //salva os dados dos envolvidos em uma ocorrencia
        $this->model->saveEnvolvidoForm($this->cod, $_POST);
        $this->model->saveEnvolvidoDadosForm($this->cod, $_POST);
        $this->setVars($this->model->getMessages());
        
        //carrega os dados já setados dos envolvidos
        $this->not_empty();
        $this->registerVar('addform', $this->model->getEnvolvidoDadosForm($this->cod));
        $this->registerVar('envolvidos', $this->model->getEnvolvidos($this->cod, false));
        $this->display(LINK.'/pessoas');
    }

    public function formulario($display = true, $link = "") {
        
        if(!isset($_SESSION['ocorrencia/grupo']))$this->redirect (CURRENT_MODULE);
        $this->LoadClassFromPlugin('ocorrencia/grupo/grupoSecurity', 'gsec');
        if(!$this->gsec->CheckEditPermission($_SESSION['ocorrencia/grupo'])){
            $this->registerVar('erro', "Você não tem permissão de criar um assunto neste grupo");
            $this->redirect('ocorrencia/grupo/show/'.$_SESSION['ocorrencia/grupo']);
        }

        $link = ($link == "")? "admin/auto/formulario":$link;
        $this->LoadModel('ocorrencia/grupo', 'gr');
        $grupo = $this->gr->selecionar(array('nome'), "cod_grupo = '".$_SESSION['ocorrencia/grupo']."'");
        if(empty($grupo)){
            $this->registerVar('erro', 'O grupo que você tentou acessar não existe!');
            $this->redirect(CURRENT_MODULE);
        }
        $grupo = array_shift($grupo);
        $this->genTags($grupo['nome'] . " - Novo Assunto");
        parent::formulario(false);
        if(!array_key_exists('values', $this->variaveis) || $this->variaveis['values'] == ""){
            unset($this->variaveis['dados']['status_label']);
            unset($this->variaveis['dados']['tipo']);
        }
        if(array_key_exists('success', $this->variaveis)) {
            $cod = $this->model->getLastId();
            $this->LoadResource("html", 'html');
            $red = $this->html->getLink(LINK."/show/$cod");                
            $this->registerVar('redirect', $red);
        }
        if($display) $this->display($link);
    }

    public function group(){
        $url = (isset($_SESSION['ocorrencia/grupo'])) ?"ocorrencia/grupo/show/".$_SESSION['ocorrencia/grupo']."/":"ocorrencia/grupo";
        Redirect($url);
    }
    
    public function reativar(){
        if(!$this->model->restaurarExcluido($this->cod)){
            $this->registerVar('erro', "Não foi possível restaurar este Assunto");
            $this->display('');
            return;
        }
        
        $grupo = (isset($_SESSION['ocorrencia/grupo']))?$_SESSION['ocorrencia/grupo']:"";
        if($this->cod == ""){ $link = ($grupo != "")? "ocorrencia/grupo/show/$grupo": "ocorrencia/grupo";}
        else $link = LINK ."/show/$this->cod";
        Redirect ($link);
    }

    public function excluir(){
        if(!$this->model->setExcluido($this->cod)){
            $this->registerVar('erro', "Não foi possível excluir este Assunto");
            $this->setVars($this->model->getMessages());
            $this->display('');
            return;
        }
        
        $grupo = (isset($_SESSION['ocorrencia/grupo']))?$_SESSION['ocorrencia/grupo']:"";
        if($this->cod == ""){ $link = ($grupo != "")? "ocorrencia/grupo/show/$grupo": "ocorrencia/grupo";}
        else $link = LINK ."/show/$this->cod";
        
        Redirect ($link);
    }

    public function editar(){
        if(!isset($this->vars[0]) || $this->vars[0] == "") $this->vars[0] = $this->cod;
        parent::formulario();
    }

    public function files(){
        $this->LoadModel('ocorrencia/anexo', 'anx');
        $this->registerVar('files', $this->anx->getAnexoPorOcorrencia($this->cod));
        
        $this->LoadModel('files/pasta', 'pst');
        $this->registerVar('size', $this->pst->getSizeOfFolder(LINK."/$this->cod/"));
        $this->display(LINK."/files");
    }

    
    public function status(){        
        $status = array('unread', 'ativas', 'arquivadas', 'solicitadas', 'responsavel');
        $function = array_shift($this->vars);
        if(!in_array($function, $status)) Redirect(LINK ."/status/unread");

        $const = get_defined_constants();
        $title = $const["OCORRENCIAS_".strtoupper($function)."_TITLE"];
        $this->registerVar("messages_title", $title);
        $this->registerVar("empty_messages_title", $const["OCORRENCIAS_".strtoupper($function)."_TITLE_EMPTY"]);
        $this->registerVar("empty_messages_message", $const["OCORRENCIAS_".strtoupper($function)."_MESSAGE_EMPTY"]);
        $this->genTags($title);
        $this->byStatus($function);
    }
    
    private function byStatus($function){
        $this->setPage();
        $this->registerVar("ocorrencias" , $this->model->$function($this->page));
        $this->registerVar("comp_action" , 'listar');
        $this->registerVar("show_links"  , '');
    	$this->display(LINK . "/unread");
    }
    
    public function coletor(){
        $this->model->coletor();
        Redirect(LINK);
    }
    
    public function refresh(){
        $var['unread'] = $this->model->unread(0, 1, "", true);
        if($var['unread'] > 0){
            $this->LoadModel('ocorrencia/mensagem', 'msg');
            $ocorrencia = $this->model->unread(0, 1, "", false);
            $ocorrencia = array_shift($ocorrencia);
            $cod_ocorrencia = $ocorrencia['cod_ocorrencia'];
            $msg = $this->msg->getUnreadMessages($this->uobj->getCodUsuario(), $cod_ocorrencia);
            $model = 'ocorrencia/mensagem';
            if(empty ($msg)){
                $model = 'ocorrencia/ocorrencias';
                $temp['descricao']      = $ocorrencia['descricao'];
                $temp['cod_ocorrencia'] = $ocorrencia['cod_ocorrencia'];
                $msg[] = $temp;
            }else $this->LoadComponent('ocorrencia/mensagem', 'ocm');  
            
            $this->LoadComponent($model, 'ocm');
            $this->ocm->showOnlyListItem();
            ob_start();
            $this->ocm->listar($model, $msg);
            $out = ob_get_contents();
            ob_end_clean();
            $var['msg'] = str_replace(
                    array(VEJA_MAIS, 'ocorrencia/mensagem/show/', 'Marcar como lida'), 
                    array('Ir para mensagem', 'ocorrencia/ocorrencias/show/'.$cod_ocorrencia."/#", ''), 
                    $out
            );
            $var['msg'] = strip_tags($var['msg'], '<a>');
            $var['msg'] = str_replace(array('Primeira', "Última"), "", $var['msg'] );
        }
        
        echo json_encode($var);
    }
    
    public function update(){
        $this->LoadModel('ocorrencia/mensagem', 'msg');
        $cod_ocorrencia = $this->vars[0];
        $lastid         = isset($_POST['lastid'])?$_POST['lastid']:0;
        $cod_usuario    = $this->uobj->getCodUsuario();
        $msg = $this->msg->getLastMessagesByOcorrencia($cod_usuario, $cod_ocorrencia, $lastid);
        $this->LoadComponent('ocorrencia/mensagem', 'ocm');
        $this->ocm->showOnlyListItem();
        ob_start();
            $this->ocm->listar('ocorrencia/mensagem', $msg);
            $out = ob_get_contents();
        ob_end_clean();
        $var['msg'] = $out;
        echo json_encode($var);
    }
    
    private function not_empty(){
        if(!empty ($this->item)) {
            $this->genTags($this->item['assunto']);
            $this->LoadComponent(LINK, "comp");
            ob_start();
            $this->comp->show(LINK, $this->item);
            $flush = ob_get_contents();
            ob_end_clean();
            EventTube::clearRegion('menu-lateral');
            EventTube::addEvent('menu-lateral', $flush);
            EventTube::lockRegion('menu-lateral');
        }
    }
}
?>